package QianFeng04;

/**策略模式（strategy Pattern）
 * 定义了一系列的算法，将每一种算法封装起来并可以相互替换使用
 * 策略模式让算法独立于使用它的客户应用而独立变化
 *
 * 把可变行为抽象出来，这样的好处是这些行为可以在真正使用的时候相互替换
 **/
public class Test8 {
    public static void main(String[] args) {
        BaseService user1 = new UserService();
        user1.setISave(new FileSave());
        user1.add("user");
        System.out.println("------------------------");
        BaseService user2 = new UserService();
        user2.setISave(new NetSave());
        user2.add("user");
    }
}
//把可变行为抽象出来，定义一系列的算法
interface ISave{
    void save(String data);
}
//本地文件数据保存
class FileSave implements ISave{

    @Override
    public void save(String data) {
        System.out.println("把数据保存到文件中..."+data);
    }
}
//网络数据保存
class NetSave implements ISave{

    @Override
    public void save(String data) {
        System.out.println("把数据保存到网络中..."+data);
    }
}

abstract class BaseService{
    private ISave iSave;

    public void setISave(ISave iSave) {
        this.iSave = iSave;
    }

    public void add(String data) {
        System.out.println("检查数据的合法性");
        iSave.save(data);
        System.out.println("数据保存完毕");
    }
}

class UserService extends BaseService {

}
